﻿using System;
using System.Collections.Generic;
using System.Text;
using PublicTransport.Services.BO;
using PublicTransport.DAL.DTO;

namespace PublicTransport.DAL
{
    /// <summary>
    /// Interface, ktorý definuje prístup k repozitáru s dátami o zastávkach.
    /// </summary>
    interface IStationDao
    {
        /// <summary>
        /// Vráti zastávky podľa presného názvu.
        /// </summary>
        /// <param name="name">Presný názov stanice</param>
        /// <returns>Nájdená stanica</returns>
        StationDTO GetStation(String name);

        /// <summary>
        /// Vráti zastávku podľa primárneho kľúča zastávky
        /// </summary>
        /// <param name="id">Primárny kľúč zastávky</param>
        /// <returns>Nájdená zastávka</returns>
        StationDTO GetStation(int id);

        /// <summary>
        /// Vráti všetky existujúce zastávky.
        /// </summary>
        /// <returns>Zoznam zastávok</returns>
        List<StationDTO> GetAllStations();

        /// <summary>
        /// Vráti všetky názvy zastávok (nie celé objekty)
        /// </summary>
        /// <returns>Zoznam názvov zastávok</returns>
        List<String> GetAllStationNames();

        /// <summary>
        /// Vráti zoznam dosiahnuteľných zastávok z danej zastávky v danom čase.
        /// </summary>
        /// <param name="startId">Zastávka, z ktorej hľadáme dosiahnuteľné spoje</param>
        /// <param name="time">Čas, v ktorom chceme spoje nájsť.</param>
        /// <returns></returns>
        List<ReacheableStationDTO> GetReacheableStations(int startId, DateTime time);
    }
}
